package com.mine.yyb.common.utils.exception;

/**
 * <pre>
 * <一句话功能简述>
 * 异常类
 * <功能详细描述>
 * </pre>
 * @author  xiongwei
 * @version  [版本号, 2014年8月22日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class MineException extends Exception implements IMineException
{
    
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 7088695583893771626L;
    
    /**code enum*/
    private Enum<?> errorCode;
    
    /**
     * 获取error code
     * 重载方法
     * @return Enum<?>
     */
    @Override
    public Enum<?> getErrorCode()
    {
        return errorCode;
    }
    
    /**
     * 设置 error code
     * 重载方法
     * @param ccpErrorCode
     */
    @Override
    public void setErrorCode(Enum<?> ccpErrorCode)
    {
        errorCode = ccpErrorCode;
        
    }
    
    /**
     * 
     * <默认构造函数>
     */
    public MineException()
    {
        super(MineErrorCode.ERROR_INTERNAL.name());
        errorCode = MineErrorCode.ERROR_INTERNAL;
    }
    
    /**
     * 通过错误码构造异常
     * <默认构造函数>
     */
    public MineException(Enum<?> code)
    {
        super(code.toString());
        errorCode = code;
    }
    
    /**
     * 通过异常信息
     * <默认构造函数>
     */
    public MineException(Exception cause)
    {
        super(MineErrorCode.ERROR_INTERNAL.toString(), cause);
        errorCode = MineErrorCode.ERROR_INTERNAL;
    }
    
    public MineException(Enum<?> code, Exception cause)
    {
        super(code.toString(), cause);
        errorCode = code;
    }
    
    /**
     * 
     * <pre>
     * <一句话功能简述>
     * 获取详细异常
     * <功能详细描述>
     * </pre>
     * @param e
     * @return
     * @see [类、类#方法、类#成员]
     */
    protected String getDetail(Throwable e)
    {
        return e.getStackTrace()[0].toString();
    }
    
}
